#include<iostream>
using namespace std;

//class Date
//{
//public:
//	Date(int year, int month, int day)
//	{
//		_year = year;
//		_month = month;
//		_day = day;
//	}
//private:
//	int _year;
//	int _month;
//	int _day;
//};
//
//int main(void)
//{
//	return 0;
//}




//class Date
//{
//public:
//	Date(int year, int month, int day)
//		:_year(year)
//		,_year(year)
//	{}
//private:
//	int _year;
//	int _month;
//	int _day;
//};


//class A
//{
//public:
//
//private:
//	int _a;
//};
//
//class B
//{
//public:
//	B(int i, int c)
//		:_i(i)
//		,_c(c)
//	{}
//
//private:
//	int& _i;
//	const int _c;
//	A _aa;
//};
//
//
//int main(void)
//{
//	return 0;
//}

//class B
//{
//public:
//	B(int& i)
//		:_i(i)
//	{}
//
//private:
//	int& _i;
//};
//
//
//int main(void)
//{
//	int i = 10;
//	B b1(i);
//	return 0;
//}


//class B
//{
//public:
//	B(int c)
//		:_c(c)
//	{}
//private:
//	const int _c;
//};
//int main(void)
//{
//	B bb1(10);
//	return 0;
//}

//class A
//{
//public:
//	A(int a)
//		:_a(a)
//	{}
//private:
//	int _a;
//};
//
//class B
//{
//public:
//	B(int aa)
//		:_aa(aa)
//	{}
//
//private:
//	A _aa;
//};
//
//int main(void)
//{
//	B bb(1);
//	return 0;
//}


//class Stack
//{
//public:
//	Stack(int capacity)
//		:_capacity(capacity)
//		,_size(0)
//	{
//		_a = (int*)malloc(sizeof(int) * capacity);
//		if (_a == nullptr)
//		{
//			perror("malloc fail");
//			return;
//		}
//	}
//private:
//	int* _a;
//	int _capacity;
//	int _size;
//};


//class A
//{
//public:
//	A(int a)
//		:_a2(a)
//		,_a1(_a2)
//	{}
//private:
//	int _a1;
//	int _a2;
//};


//class A
//{
//public:
//	explicit A(int a)
//		:_a(a)
//	{}
//private:
//	int _a;
//};
//
//int main(void)
//{
//	A aa1 = 2;
//	return 0;
//}



//class A
//{
//public:
//	A(int a)
//		:_a(a)
//	{
//		++_count;
//	}
//	A(const A& a)
//	{
//		++_count;
//	}
//	~A()
//	{
//		--_count;
//	}
//	int GetCount()
//	{
//		return _count;
//	}
//private:
//	int _a;
//	static int _count = 0;
//};
//int A::_count = 0;
//
//void Fun1()
//{
//	A aa3(2);
//	cout << __LINE__ << ":" << aa3.GetCount() << endl;
//}
//int main(void)
//{
//	A aa1(1);
//	cout << __LINE__ << ":" << aa1.GetCount() << endl;
//	A aa2(aa1);
//	cout << __LINE__ << ":" << aa1.GetCount() << endl;
//	Fun1();
//	cout << __LINE__ << ":" << aa1.GetCount() << endl;
//	return 0;
//}


class A
{
public:
	static A GetStackObj(int a)
	{
		A a1(a);
		return a1;
	}
private:
	A(int a1)
		:_a1(a1)
	{}
	int _a1;
};
int main(void)
{
	A a1 = A::GetStackObj();
	return 0;
}

